/**
 * # 模块 Api 类:
 *  Users - 用户管理
 * 
 * # 描述:
 *  向系统管理人员提供用户的管理功能，包括为用户设置权限。
 *  
 * Copyright (c), 上海沃恩信息科技有限公司.
 * All rights reserved.
 * Licensed under BSD (https://www.pittypat.work/bsd.html).
 */

package com.waln.authority.users;

/**
 * 提供对模块 用户管理 中功能的封装和调用。
 */
@pittypat.ModuleAnnotation(presentation = pittypat.ModulePresentation.UI, allowAnonymous = false)
public final class Api extends pittypat.Module {
	/**
	 * 查询并显示系统中已经注册的所有用户。
	 * 
	 * @param model
	 *            功能模型对象，其中包含了功能的参数列表、执行状态以及相关消息。
	 * @param progress
	 *            跟踪和汇报异步操作的进度。
	 * 
	 * @return pittypat.IJson 操作成功返回所有输出参数的字典，否则返回 null。
	 * 
	 * @throws IllegalArgumentException
	 * @throws IllegalAccessException
	 * @throws ClassNotFoundException
	 * @throws InstantiationException
	 * @throws SQLException
	 * @throws PropertyVetoException
	 * @throws ConfigException
	 * @throws SecurityException
	 * @throws NoSuchMethodException
	 * @throws InvocationTargetException
	 * @throws UnsupportedEncodingException
	 * 
	 * @see pittypat.IJson
	 * @see pittypat.FunctionModel
	 * @see pittypat.IAsyncProgress
	 */
	public pittypat.IJson list(pittypat.FunctionModel<com.waln.authority.users.args.List> model,
			pittypat.IAsyncProgress progress) throws IllegalArgumentException, IllegalAccessException,
			InstantiationException, ClassNotFoundException, java.sql.SQLException, java.io.UnsupportedEncodingException,
			java.lang.reflect.InvocationTargetException, NoSuchMethodException, SecurityException,
			pittypat.configuration.ConfigException, java.beans.PropertyVetoException {
		// 执行数据操作
		this.getDataService().exec(model, progress);

		// 如果操作成功，返回所有输出参数的字典
		return model.isSuccess() ? model.getOutArgs() : null;
	}

	/**
	 * 添加一个新的用户账号。
	 * 
	 * @param model
	 *            功能模型对象，其中包含了功能的参数列表、执行状态以及相关消息。
	 * @param progress
	 *            跟踪和汇报异步操作的进度。
	 * 
	 * @return pittypat.IJson 操作成功返回 新用户，否则返回 null。
	 * 
	 * @throws IllegalArgumentException
	 * @throws IllegalAccessException
	 * @throws ClassNotFoundException
	 * @throws InstantiationException
	 * @throws SQLException
	 * @throws PropertyVetoException
	 * @throws ConfigException
	 * @throws SecurityException
	 * @throws NoSuchMethodException
	 * @throws InvocationTargetException
	 * @throws UnsupportedEncodingException
	 * 
	 * @see pittypat.IJson
	 * @see pittypat.FunctionModel
	 * @see pittypat.IAsyncProgress
	 */
	public pittypat.IJson add(pittypat.FunctionModel<com.waln.authority.users.args.Add> model,
			pittypat.IAsyncProgress progress) throws IllegalArgumentException, IllegalAccessException,
			InstantiationException, ClassNotFoundException, java.sql.SQLException, java.io.UnsupportedEncodingException,
			java.lang.reflect.InvocationTargetException, NoSuchMethodException, SecurityException,
			pittypat.configuration.ConfigException, java.beans.PropertyVetoException {
		// 执行数据操作
		this.getDataService().exec(model, progress);

		// 如果操作成功，返回新用户
		return model.isSuccess() ? model.getArgs().user : null;
	}

	/**
	 * 设置指定用户的用户资料，不包括登录密码。
	 * 
	 * @param model
	 *            功能模型对象，其中包含了功能的参数列表、执行状态以及相关消息。
	 * @param progress
	 *            跟踪和汇报异步操作的进度。
	 * 
	 * @return pittypat.IJson 操作成功返回 用户信息，否则返回 null。
	 * 
	 * @throws IllegalArgumentException
	 * @throws IllegalAccessException
	 * @throws ClassNotFoundException
	 * @throws InstantiationException
	 * @throws SQLException
	 * @throws PropertyVetoException
	 * @throws ConfigException
	 * @throws SecurityException
	 * @throws NoSuchMethodException
	 * @throws InvocationTargetException
	 * @throws UnsupportedEncodingException
	 * 
	 * @see pittypat.IJson
	 * @see pittypat.FunctionModel
	 * @see pittypat.IAsyncProgress
	 */
	public pittypat.IJson edit(pittypat.FunctionModel<com.waln.authority.users.args.Edit> model,
			pittypat.IAsyncProgress progress) throws IllegalArgumentException, IllegalAccessException,
			InstantiationException, ClassNotFoundException, java.sql.SQLException, java.io.UnsupportedEncodingException,
			java.lang.reflect.InvocationTargetException, NoSuchMethodException, SecurityException,
			pittypat.configuration.ConfigException, java.beans.PropertyVetoException {
		// 执行数据操作
		this.getDataService().exec(model, progress);

		// 如果操作成功，返回用户信息
		return model.isSuccess() ? model.getArgs().user : null;
	}

	/**
	 * 设置指定用户的登录密码。
	 * 
	 * @param model
	 *            功能模型对象，其中包含了功能的参数列表、执行状态以及相关消息。
	 * @param progress
	 *            跟踪和汇报异步操作的进度。
	 * 
	 * @return pittypat.IJson 没有输出参数，默认总是返回 null。
	 * 
	 * @throws IllegalArgumentException
	 * @throws IllegalAccessException
	 * @throws ClassNotFoundException
	 * @throws InstantiationException
	 * @throws SQLException
	 * @throws PropertyVetoException
	 * @throws ConfigException
	 * @throws SecurityException
	 * @throws NoSuchMethodException
	 * @throws InvocationTargetException
	 * @throws UnsupportedEncodingException
	 * 
	 * @see pittypat.IJson
	 * @see pittypat.FunctionModel
	 * @see pittypat.IAsyncProgress
	 */
	public pittypat.IJson setPassword(pittypat.FunctionModel<com.waln.authority.users.args.SetPassword> model,
			pittypat.IAsyncProgress progress) throws IllegalArgumentException, IllegalAccessException,
			InstantiationException, ClassNotFoundException, java.sql.SQLException, java.io.UnsupportedEncodingException,
			java.lang.reflect.InvocationTargetException, NoSuchMethodException, SecurityException,
			pittypat.configuration.ConfigException, java.beans.PropertyVetoException {
		// 执行数据操作
		this.getDataService().exec(model, progress);

		// model.getArgs() 没有定义输出参数
		return null;
	}

	/**
	 * 设置指定用户的用户头像。
	 * 
	 * @param model
	 *            功能模型对象，其中包含了功能的参数列表、执行状态以及相关消息。
	 * @param progress
	 *            跟踪和汇报异步操作的进度。
	 * 
	 * @return pittypat.IJson 操作成功返回 原用户头像路径，否则返回 null。
	 * 
	 * @throws IllegalArgumentException
	 * @throws IllegalAccessException
	 * @throws ClassNotFoundException
	 * @throws InstantiationException
	 * @throws SQLException
	 * @throws PropertyVetoException
	 * @throws ConfigException
	 * @throws SecurityException
	 * @throws NoSuchMethodException
	 * @throws InvocationTargetException
	 * @throws UnsupportedEncodingException
	 * 
	 * @see pittypat.IJson
	 * @see pittypat.FunctionModel
	 * @see pittypat.IAsyncProgress
	 */
	public pittypat.IJson setFace(pittypat.FunctionModel<com.waln.authority.users.args.SetFace> model,
			pittypat.IAsyncProgress progress) throws IllegalArgumentException, IllegalAccessException,
			InstantiationException, ClassNotFoundException, java.sql.SQLException, java.io.UnsupportedEncodingException,
			java.lang.reflect.InvocationTargetException, NoSuchMethodException, SecurityException,
			pittypat.configuration.ConfigException, java.beans.PropertyVetoException {
		// 执行数据操作
		this.getDataService().exec(model, progress);
		
		if (model.isSuccess()) {
			pittypat.web.VirtualFile.delete(model.getArgs().oldFaceUrl);
		} else {
			pittypat.web.VirtualFile.delete(model.getArgs().faceUrl);
		}

		return null;
	}

	/**
	 * 锁定或者解锁用户。
	 * 
	 * @param model
	 *            功能模型对象，其中包含了功能的参数列表、执行状态以及相关消息。
	 * @param progress
	 *            跟踪和汇报异步操作的进度。
	 * 
	 * @return pittypat.IJson 操作成功返回 用户信息，否则返回 null。
	 * 
	 * @throws IllegalArgumentException
	 * @throws IllegalAccessException
	 * @throws ClassNotFoundException
	 * @throws InstantiationException
	 * @throws SQLException
	 * @throws PropertyVetoException
	 * @throws ConfigException
	 * @throws SecurityException
	 * @throws NoSuchMethodException
	 * @throws InvocationTargetException
	 * @throws UnsupportedEncodingException
	 * 
	 * @see pittypat.IJson
	 * @see pittypat.FunctionModel
	 * @see pittypat.IAsyncProgress
	 */
	public pittypat.IJson lock(pittypat.FunctionModel<com.waln.authority.users.args.Lock> model,
			pittypat.IAsyncProgress progress) throws IllegalArgumentException, IllegalAccessException,
			InstantiationException, ClassNotFoundException, java.sql.SQLException, java.io.UnsupportedEncodingException,
			java.lang.reflect.InvocationTargetException, NoSuchMethodException, SecurityException,
			pittypat.configuration.ConfigException, java.beans.PropertyVetoException {
		// 执行数据操作
		this.getDataService().exec(model, progress);

		// 如果操作成功，返回用户信息
		return model.isSuccess() ? model.getArgs().user : null;
	}

	/**
	 * 删除指定的用户账号。
	 * 
	 * @param model
	 *            功能模型对象，其中包含了功能的参数列表、执行状态以及相关消息。
	 * @param progress
	 *            跟踪和汇报异步操作的进度。
	 * 
	 * @return pittypat.IJson 没有输出参数，默认总是返回 null。
	 * 
	 * @throws IllegalArgumentException
	 * @throws IllegalAccessException
	 * @throws ClassNotFoundException
	 * @throws InstantiationException
	 * @throws SQLException
	 * @throws PropertyVetoException
	 * @throws ConfigException
	 * @throws SecurityException
	 * @throws NoSuchMethodException
	 * @throws InvocationTargetException
	 * @throws UnsupportedEncodingException
	 * 
	 * @see pittypat.IJson
	 * @see pittypat.FunctionModel
	 * @see pittypat.IAsyncProgress
	 */
	public pittypat.IJson delete(pittypat.FunctionModel<com.waln.authority.users.args.Delete> model,
			pittypat.IAsyncProgress progress) throws IllegalArgumentException, IllegalAccessException,
			InstantiationException, ClassNotFoundException, java.sql.SQLException, java.io.UnsupportedEncodingException,
			java.lang.reflect.InvocationTargetException, NoSuchMethodException, SecurityException,
			pittypat.configuration.ConfigException, java.beans.PropertyVetoException {
		// 执行数据操作
		this.getDataService().exec(model, progress);

		// model.getArgs() 没有定义输出参数
		return null;
	}

	/**
	 * 查询已经安装的所有 App 的列表。
	 * 
	 * @param model
	 *            功能模型对象，其中包含了功能的参数列表、执行状态以及相关消息。
	 * @param progress
	 *            跟踪和汇报异步操作的进度。
	 * 
	 * @return pittypat.IJson 操作成功返回 App 列表，否则返回 null。
	 * 
	 * @throws IllegalArgumentException
	 * @throws IllegalAccessException
	 * @throws ClassNotFoundException
	 * @throws InstantiationException
	 * @throws SQLException
	 * @throws PropertyVetoException
	 * @throws ConfigException
	 * @throws SecurityException
	 * @throws NoSuchMethodException
	 * @throws InvocationTargetException
	 * @throws UnsupportedEncodingException
	 * 
	 * @see pittypat.IJson
	 * @see pittypat.FunctionModel
	 * @see pittypat.IAsyncProgress
	 */
	public pittypat.IJson apps(pittypat.FunctionModel<com.waln.authority.users.args.Apps> model,
			pittypat.IAsyncProgress progress) throws IllegalArgumentException, IllegalAccessException,
			InstantiationException, ClassNotFoundException, java.sql.SQLException, java.io.UnsupportedEncodingException,
			java.lang.reflect.InvocationTargetException, NoSuchMethodException, SecurityException,
			pittypat.configuration.ConfigException, java.beans.PropertyVetoException {
		// 执行数据操作
		this.getDataService().exec(model, progress);

		// 如果操作成功，返回App 列表
		return model.isSuccess() ? model.getArgs().list : null;
	}

	/**
	 * 查询隶属于指定 App 的模块的列表。
	 * 
	 * @param model
	 *            功能模型对象，其中包含了功能的参数列表、执行状态以及相关消息。
	 * @param progress
	 *            跟踪和汇报异步操作的进度。
	 * 
	 * @return pittypat.IJson 操作成功返回 模块列表，否则返回 null。
	 * 
	 * @throws IllegalArgumentException
	 * @throws IllegalAccessException
	 * @throws ClassNotFoundException
	 * @throws InstantiationException
	 * @throws SQLException
	 * @throws PropertyVetoException
	 * @throws ConfigException
	 * @throws SecurityException
	 * @throws NoSuchMethodException
	 * @throws InvocationTargetException
	 * @throws UnsupportedEncodingException
	 * 
	 * @see pittypat.IJson
	 * @see pittypat.FunctionModel
	 * @see pittypat.IAsyncProgress
	 */
	public pittypat.IJson modules(pittypat.FunctionModel<com.waln.authority.users.args.Modules> model,
			pittypat.IAsyncProgress progress) throws IllegalArgumentException, IllegalAccessException,
			InstantiationException, ClassNotFoundException, java.sql.SQLException, java.io.UnsupportedEncodingException,
			java.lang.reflect.InvocationTargetException, NoSuchMethodException, SecurityException,
			pittypat.configuration.ConfigException, java.beans.PropertyVetoException {
		// 执行数据操作
		this.getDataService().exec(model, progress);

		// 如果操作成功，返回模块列表
		return model.isSuccess() ? model.getArgs().list : null;
	}

	/**
	 * 为指定的部门、岗位或用户添加一个权限。
	 * 
	 * @param model
	 *            功能模型对象，其中包含了功能的参数列表、执行状态以及相关消息。
	 * @param progress
	 *            跟踪和汇报异步操作的进度。
	 * 
	 * @return pittypat.IJson 没有输出参数，默认总是返回 null。
	 * 
	 * @throws IllegalArgumentException
	 * @throws IllegalAccessException
	 * @throws ClassNotFoundException
	 * @throws InstantiationException
	 * @throws SQLException
	 * @throws PropertyVetoException
	 * @throws ConfigException
	 * @throws SecurityException
	 * @throws NoSuchMethodException
	 * @throws InvocationTargetException
	 * @throws UnsupportedEncodingException
	 * 
	 * @see pittypat.IJson
	 * @see pittypat.FunctionModel
	 * @see pittypat.IAsyncProgress
	 */
	public pittypat.IJson grant(pittypat.FunctionModel<com.waln.authority.users.args.Grant> model,
			pittypat.IAsyncProgress progress) throws IllegalArgumentException, IllegalAccessException,
			InstantiationException, ClassNotFoundException, java.sql.SQLException, java.io.UnsupportedEncodingException,
			java.lang.reflect.InvocationTargetException, NoSuchMethodException, SecurityException,
			pittypat.configuration.ConfigException, java.beans.PropertyVetoException {
		// 执行数据操作
		this.getDataService().exec(model, progress);

		// model.getArgs() 没有定义输出参数
		return null;
	}

	/**
	 * 删除一个权限。
	 * 
	 * @param model
	 *            功能模型对象，其中包含了功能的参数列表、执行状态以及相关消息。
	 * @param progress
	 *            跟踪和汇报异步操作的进度。
	 * 
	 * @return pittypat.IJson 没有输出参数，默认总是返回 null。
	 * 
	 * @throws IllegalArgumentException
	 * @throws IllegalAccessException
	 * @throws ClassNotFoundException
	 * @throws InstantiationException
	 * @throws SQLException
	 * @throws PropertyVetoException
	 * @throws ConfigException
	 * @throws SecurityException
	 * @throws NoSuchMethodException
	 * @throws InvocationTargetException
	 * @throws UnsupportedEncodingException
	 * 
	 * @see pittypat.IJson
	 * @see pittypat.FunctionModel
	 * @see pittypat.IAsyncProgress
	 */
	public pittypat.IJson revoke(pittypat.FunctionModel<com.waln.authority.users.args.Revoke> model,
			pittypat.IAsyncProgress progress) throws IllegalArgumentException, IllegalAccessException,
			InstantiationException, ClassNotFoundException, java.sql.SQLException, java.io.UnsupportedEncodingException,
			java.lang.reflect.InvocationTargetException, NoSuchMethodException, SecurityException,
			pittypat.configuration.ConfigException, java.beans.PropertyVetoException {
		// 执行数据操作
		this.getDataService().exec(model, progress);

		// model.getArgs() 没有定义输出参数
		return null;
	}
}
